import { reactive, readonly } from 'vue'

// 状态
const state = reactive({
  appConfig: null,
  modelConfig: null,
  isLoading: false,
  error: null
})

// 默认配置
const defaultConfigs = {
  appConfig: {
    name: '默认配置',
    selector: '[class^="questionTypeTitle___"]',
    messages: [
      { role: 'system', content: '#你所有的回答都是JSON格式【你所有的回答都是JSON格式】' },
      { role: 'system', content: '不要多余解释！单选题多选题和判断题只要答案的选项即可（单选题answer字段是只有一个元素的数组，多选题answer字段是数组，判断题数组元素是正确或者是错误）,最终输出格式为:{ "answer": ["A","*"]  }' },
      { role: 'system', content: '不要多余解释！填空题一个问题可能有多个空要确保，一个填空标志为▁▁▁▁▁，或者识别填空项1,填空项2,填空项3...作为最终数组的length，不要多出数组！答案是数组{ "answer": ["填空答案一","二"]  }' }
    ],
    extraConfig: {
      model: 'Qwen/Qwen2.5-7B-Instruct',
      temperature: 0.3,
      top_p: 0.9
    }
  },
  modelConfig: {
    baseUrl: 'https://api.siliconflow.cn/v1/chat/completions',
    apiKey: '',
    name: '默认模型'
  }
}

// 操作
async function fetchAppConfig(name) {
  state.isLoading = true
  state.error = null
  
  try {
    const response = await fetch(`http://localhost:8085/app-config/search/name?name=${encodeURIComponent(name)}`)
    
    if (!response.ok) {
      throw new Error(`获取应用配置失败: ${response.status}`)
    }
    
    const data = await response.json()
    state.appConfig = data.data || data
    
    // 保存到存储
    chrome.storage.sync.set({ appConfig: state.appConfig })
    
    return state.appConfig
  } catch (error) {
    state.error = `应用配置错误: ${error.message}`
    console.error('获取应用配置错误:', error)
    
    // 使用存储中的默认配置（如果可用）
    chrome.storage.sync.get(['appConfig'], result => {
      if (result.appConfig) {
        state.appConfig = result.appConfig
      } else {
        state.appConfig = defaultConfigs.appConfig
      }
    })
    
    throw error
  } finally {
    state.isLoading = false
  }
}

async function fetchAIModelConfig() {
  state.isLoading = true
  state.error = null
  
  try {
    const response = await fetch('http://localhost:8085/ai-model-config/default')
    
    if (!response.ok) {
      throw new Error(`获取AI模型配置失败: ${response.status}`)
    }
    
    const data = await response.json()
    state.modelConfig = data.data || data
    
    // 保存到存储
    chrome.storage.sync.set({ modelConfig: state.modelConfig })
    
    return state.modelConfig
  } catch (error) {
    state.error = `模型配置错误: ${error.message}`
    console.error('获取AI模型配置错误:', error)
    
    // 使用存储中的默认配置（如果可用）
    chrome.storage.sync.get(['modelConfig'], result => {
      if (result.modelConfig) {
        state.modelConfig = result.modelConfig
      } else {
        state.modelConfig = defaultConfigs.modelConfig
      }
    })
    
    throw error
  } finally {
    state.isLoading = false
  }
}

// 直接更新应用配置
function updateAppConfig(appConfig) {
  state.appConfig = {
    ...state.appConfig,
    ...appConfig
  }
  
  // 保存到存储
  chrome.storage.sync.set({ appConfig: state.appConfig })
  
  return state.appConfig
}

// 直接更新模型配置
function updateModelConfig(modelConfig) {
  state.modelConfig = modelConfig
  
  // 保存到存储
  chrome.storage.sync.set({ modelConfig })
  
  return state.modelConfig
}

// 清除错误
function clearError() {
  state.error = null
}

// 从存储初始化
function init() {
  chrome.storage.sync.get(['appConfig', 'modelConfig'], result => {
    if (result.appConfig) {
      state.appConfig = result.appConfig
    } else {
      state.appConfig = defaultConfigs.appConfig
    }
    
    if (result.modelConfig) {
      state.modelConfig = result.modelConfig
    } else {
      state.modelConfig = defaultConfigs.modelConfig
    }
  })
}

// 导出 Store
export function useConfigStore() {
  init()
  
  return {
    state: readonly(state),
    fetchAppConfig,
    fetchAIModelConfig,
    updateModelConfig,
    updateAppConfig,
    clearError
  }
} 